package com.textcheck;

/**
 * 文本相似度计算接口
 * 
 * 该接口定义了计算两个文本相似度的标准方法。
 * 项目中实现了三种不同的相似度算法：
 * 
 * 1. 余弦相似度 (CosineSimilarity)
 *    - 基于词频向量的夹角余弦值
 *    - 适合长文本比较
 *    - 考虑词频信息
 * 
 * 2. 编辑距离 (LevenshteinDistance)
 *    - 基于字符级别的编辑操作
 *    - 适合短文本比较
 *    - 考虑字符位置
 * 
 * 3. Jaccard相似度 (JaccardSimilarity)
 *    - 基于集合的交并比
 *    - 适合中等长度文本
 *    - 不考虑词频和位置
 * 
 * 使用说明：
 * - 输入参数可以是任意文本字符串
 * - 支持中英文混合文本
 * - 返回值范围：[0.0, 1.0]
 * - 1.0表示完全相同，0.0表示完全不同
 * - null或空字符串有特殊处理规则
 */
public interface SimilarityCalculator {

    /**
     * 计算两个文本的相似度
     * 
     * @param text1 第一个文本
     * @param text2 第二个文本
     * @return 相似度，范围[0.0, 1.0]
     *         1.0表示完全相同
     *         0.0表示完全不同
     *         
     * 特殊情况处理规则：
     * 1. 如果两个文本都为null，返回0.0
     * 2. 如果其中一个文本为null，返回0.0
     * 3. 如果两个文本都为空字符串，返回1.0
     * 4. 如果其中一个文本为空字符串，返回0.0
     */
    double calculate(String text1, String text2);
}